Write-back disk caches are commonly found in data storage systems. These caches are used to improve disk bandwidth utilization in the case of write operations and to reduce the number of disk input/output (“I/O”) operations in the case of read operations. Write-back caches generally operate by storing data that is to be written to disk in random access memory (“RAM”) until an appropriate time when the data can be flushed from the cache to the disk in batches. The contents of the cache are also utilized to satisfy read requests, when possible, thereby avoiding a costly read from the disk.
While write-back caching has several attractions, there are issues that arise because the disk driver layer below the cache is only called when the cache is flushed. In particular, disk errors may go unnoticed until a flush, even though the operation appears to have completed successfully to the initiator. This problem is often manifested as a “delayed write failure” in some operating systems. In thin provisioned systems, which can allocate an amount of storage greater than the actual physical capacity of the system, write-back caches may store a large amount of data without knowledge that the underlying disks do not have the space to accommodate the data. Only when the cache is flushed does the out of space error occur. At that point in time it is typically too late for the initiator to account for the problem.
One other problem that is often encountered in storage systems is that of file system and operating system metadata I/O operations reducing the sequentiality of data I/O operations. Typical write-back caches do nothing to mitigate this problem, thereby reducing the overall performance of the storage subsystem.
It is with respect to these considerations and others that the present invention has been made.